package com.industrial.premu.service.impl;

import com.industrial.premu.domain.PreMuBenefitEvaluation;
import com.industrial.premu.domain.PreMuBenefitEvaluation20250520;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Calendar;
import java.util.List;

/**
 * description:
 * auth fcb
 * date 2025-05-21 09:48
 **/
@Service
public class PreMuBenefitEvaluationService2025 {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 评价确认表导出 2025修改
     * @param response
     * @param list
     * @param companyType
     */
    public void getPreMuBenefitEvaluationExcel(HttpServletResponse response, List<PreMuBenefitEvaluation20250520> list, String companyType) {
        try {
            String templatePath = "/home/premu/muban/premu_jg-2025.xlsx";
            Workbook workbook = new XSSFWorkbook(new FileInputStream(templatePath));
            // 获取工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 获取第 1 行
            Row firstRow = sheet.getRow(0);
            Cell cell0 = firstRow.createCell(0);
            // 遍历第 1 行的单元格,并将其值设为空
            for (int i = 0; i < firstRow.getPhysicalNumberOfCells(); i++) {
                Cell cell = firstRow.getCell(i);
                cell.setCellValue("");
            }
            // 清空模板文件中的原有数据
            int lastRowNum = sheet.getLastRowNum();
            for (int i = lastRowNum; i >= 4; i--) {
                Row row = sheet.getRow(i);
                if (row != null) {
                    sheet.removeRow(row);
                }
            }

            // 填充新数据
            int rowNum = 3;
            for (PreMuBenefitEvaluation20250520 p : list) {

                String countyName = redisTemplate.opsForValue().get("area:" + p.getCounty());

//                String countyName = area.getCountyName();
                // 获取当前年份
                int currentYear = Calendar.getInstance().get(Calendar.YEAR);
                int previousYear = currentYear - 1;
                //市区县+当前年-1年+年度规上企业分类综合评价表   拼接起来
                // 拼接字符串
//                String cityCountyKey = list.get(0).getCity() + "-" + list.get(0).getCounty();

                String reportTitle = countyName + previousYear + "年度" + companyType + "分类综合评价表";
                // 设置单元格样式
                CellStyle cellStyle = workbook.createCellStyle();
                // 设置单元格内容居中
                cellStyle.setAlignment(HorizontalAlignment.CENTER);
                cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
                // 设置字体样式
                Font font = workbook.createFont();
                font.setFontName("等线");
                font.setFontHeightInPoints((short) 28);
                cellStyle.setFont(font);
                // 将样式应用到单元格
                cell0.setCellStyle(cellStyle);
                // 设置单元格内容
                cell0.setCellValue(reportTitle);

                //查找行业门类（大类、中类）
//                PreMuBenefitEvaluationVo name = preMuBenefitEvaluationMapper.groupIndustry(p.getId());
                String industryTypeName = p.getIndustryTypeName();
                String industryMediumTypeName = p.getIndustryMediumTypeName();
                Row row = sheet.createRow(rowNum++);
                // 第一列设置序号
                row.createCell(0).setCellType(CellType.NUMERIC);
                row.getCell(0).setCellValue(rowNum - 3); // 从 5 开始递增
                if (p.getCompanyName() == null || p.getCompanyName().trim().isEmpty()) {
                    row.createCell(1).setCellValue("——");
                } else {
                    row.createCell(1).setCellValue(p.getCompanyName());// 企业名称
                }

                if (p.getAddr() == null || p.getAddr().trim().isEmpty()) {
                    row.createCell(2).setCellValue("——");
                } else {
                    row.createCell(2).setCellValue(countyName);// 所在县市区
                }

                if (industryTypeName == null || industryTypeName.trim().isEmpty()) {
                    row.createCell(3).setCellValue("——");
                } else {
                    row.createCell(3).setCellValue(industryTypeName);// 所属行业大类
                }

                if (industryMediumTypeName == null || industryMediumTypeName.trim().isEmpty()) {
                    row.createCell(4).setCellValue("——");
                } else {
                    row.createCell(4).setCellValue(industryMediumTypeName);// 所属行业中类
                }

                // 设置单元格样式
                CellStyle cellStyleRow = workbook.createCellStyle();
                // 设置单元格内容居中
                cellStyleRow.setAlignment(HorizontalAlignment.CENTER);
                cellStyleRow.setVerticalAlignment(VerticalAlignment.CENTER);

                Cell cell5 = row.createCell(5);
                if (p.getSumArea() == null || p.getSumArea().toString().trim().isEmpty()) {
                    cell5.setCellValue("——");
                } else {
                    cell5.setCellValue(String.valueOf(p.getSumArea()));//用地面积（亩）
                }
//                if (p.getActualTax() == null || p.getActualTax().toString().trim().isEmpty()) {
//                    row.createCell(6).setCellValue("——");
//                } else {
//                    row.createCell(6).setCellValue(String.valueOf(p.getActualTax()));//税收实际贡献万元
//                }

                if (p.getProfitTotal() == null || p.getProfitTotal().trim().isEmpty()) {
                    row.createCell(6).setCellValue("——");
                } else {
                    row.createCell(6).setCellValue(p.getProfitTotal());//利润总额
                }


                if (p.getMainIncome() == null || p.getMainIncome().toString().trim().isEmpty()) {
                    row.createCell(7).setCellValue("——");
                } else {
                    row.createCell(7).setCellValue(String.valueOf(p.getMainIncome()));//营业收入（万元）
                }
                if (p.getTotalUsed() == null || p.getTotalUsed().trim().isEmpty()) {
                    row.createCell(8).setCellValue("——");
                } else {
                    row.createCell(8).setCellValue(p.getTotalUsed());//总能耗 吨标煤
                }
                if (p.getTotalEquivalent() == null || p.getTotalEquivalent().trim().isEmpty()) {
                    row.createCell(9).setCellValue("——");
                } else {
                    row.createCell(9).setCellValue(p.getTotalEquivalent());//--主要污染物排放 当量吨 不确定
                }

                if (p.getRdFunds() == null || p.getRdFunds().toString().trim().isEmpty()) {
                    row.createCell(10).setCellValue("——");
                } else {
                    row.createCell(10).setCellValue(String.valueOf(p.getRdFunds()));//研发经费支出（万元）
                }

                if (p.getAnnualEmployees() == null || p.getAnnualEmployees().toString().trim().isEmpty()) {
                    row.createCell(11).setCellValue("——");
                } else {
                    row.createCell(11).setCellValue(String.valueOf(p.getAnnualEmployees()));//年平均职工人数（人）
                }
                if (p.getIndustryOutput() == null || p.getIndustryOutput().toString().trim().isEmpty()) {
                    row.createCell(12).setCellValue("——");
                } else {
                    row.createCell(12).setCellValue(String.valueOf(p.getIndustryOutput()));//工业总产值（万元）
                }

                Cell cell13 = row.createCell(13);
                if (p.getWaterBureau() == null || p.getWaterBureau().toString().trim().isEmpty()) {
                    cell13.setCellValue("——");
                } else {
                    cell13.setCellValue(String.valueOf(p.getWaterBureau()));//耗水量（立方米）
                }
                // 设置该列单元格的居中样式
                cell13.setCellStyle(cellStyleRow);
//                if (p.getAddedTax() == null || p.getAddedTax().toString().trim().isEmpty()) {
//                    row.createCell(14).setCellValue("——");
//                } else {
//                    row.createCell(14).setCellValue(String.valueOf(p.getAddedTax()));//增值税（万元）删除
//
//                }
//                if (p.getExciseTax() == null || p.getExciseTax().toString().trim().isEmpty()) {
//                    row.createCell(15).setCellValue("——");
//                } else {
//                    row.createCell(15).setCellValue(String.valueOf(p.getExciseTax()));//消费税（万元）删除
//                }
//
//                if (p.getCompanyTax() == null || p.getCompanyTax().toString().trim().isEmpty()) {
//                    row.createCell(16).setCellValue("——");
//                } else {
//                    row.createCell(16).setCellValue(String.valueOf(p.getCompanyTax()));//企业所得税（万元
//                }
//                if (p.getPersonalTax() == null || p.getPersonalTax().toString().trim().isEmpty()) {
//                    row.createCell(17).setCellValue("——");
//                } else {
//                    row.createCell(17).setCellValue(String.valueOf(p.getPersonalTax()));//个人所得税（万元）
//                }
//                if (p.getResourcesTax() == null || p.getResourcesTax().toString().trim().isEmpty()) {
//                    row.createCell(18).setCellValue("——");
//                } else {
//                    row.createCell(18).setCellValue(String.valueOf(p.getResourcesTax()));//资源税（万元
//                }
//                if (p.getCityMaintainTax() == null || p.getCityMaintainTax().toString().trim().isEmpty()) {
//                    row.createCell(19).setCellValue("——");
//                } else {
//                    row.createCell(19).setCellValue(String.valueOf(p.getCityMaintainTax()));//城市维护建设税（万元）
//                }
//                if (p.getRealestateTax() == null || p.getRealestateTax().toString().trim().isEmpty()) {
//                    row.createCell(20).setCellValue("——");
//                } else {
//                    row.createCell(20).setCellValue(String.valueOf(p.getRealestateTax()));//房产税（万元）
//                }
//                if (p.getPrintingTax() == null || p.getPrintingTax().toString().trim().isEmpty()) {
//                    row.createCell(21).setCellValue("——");
//                } else {
//                    row.createCell(21).setCellValue(String.valueOf(p.getPrintingTax()));//印花税（万元）
//                }
//                if (p.getLandTax() == null || p.getLandTax().toString().trim().isEmpty()) {
//                    row.createCell(22).setCellValue("——");
//                } else {
//                    row.createCell(22).setCellValue(String.valueOf(p.getLandTax()));//土地使用税（万元）
//                }
//                if (p.getLandAppreciationTax() == null || p.getLandAppreciationTax().toString().trim().isEmpty()) {
//                    row.createCell(23).setCellValue("——");
//                } else {
//                    row.createCell(23).setCellValue(String.valueOf(p.getLandAppreciationTax()));//土地增值税（万元）
//                }
//                if (p.getTravelTax() == null || p.getTravelTax().toString().trim().isEmpty()) {
//                    row.createCell(24).setCellValue("——");
//                } else {
//                    row.createCell(24).setCellValue(String.valueOf(p.getTravelTax()));//车船税（万元）
//                }
//                if (p.getVehiclePurchaseTax() == null || p.getVehiclePurchaseTax().toString().trim().isEmpty()) {
//                    row.createCell(25).setCellValue("——");
//                } else {
//                    row.createCell(25).setCellValue(String.valueOf(p.getVehiclePurchaseTax()));//购车税（万元）
//                }
//                if (p.getFarmlandOccupationTax() == null || p.getFarmlandOccupationTax().toString().trim().isEmpty()) {
//                    row.createCell(26).setCellValue("——");
//                } else {
//                    row.createCell(26).setCellValue(String.valueOf(p.getFarmlandOccupationTax()));//耕地占用税（万元）
//                }
//                if (p.getDeedTax() == null || p.getDeedTax().toString().trim().isEmpty()) {
//                    row.createCell(27).setCellValue("——");
//                } else {
//                    row.createCell(27).setCellValue(String.valueOf(p.getDeedTax()));//契税（万元）
//                }
//                if (p.getEnvironmentalProtectionTax() == null || p.getEnvironmentalProtectionTax().toString().trim().isEmpty()) {
//
//                } else {
//                    row.createCell(28).setCellValue(String.valueOf(p.getEnvironmentalProtectionTax()));//环保税（万元）
//                }
//                if (p.getTobaccoTax() == null || p.getTobaccoTax().toString().trim().isEmpty()) {
//
//                } else {
//                    row.createCell(29).setCellValue(String.valueOf(p.getTobaccoTax()));//烟叶税（万元）
//                }
//
//                if (p.getScore1() == null || p.getScore1().toString().trim().isEmpty()) {
//                    row.createCell(30).setCellValue("——");
//                } else {
//                    row.createCell(30).setCellValue(String.valueOf(p.getScore1()));//单位用地税收得分
//                }

                if (p.getScore8() == null || p.getScore8().toString().trim().isEmpty()) {
                    row.createCell(14).setCellValue("——");
                } else {
                    row.createCell(14).setCellValue(String.valueOf(p.getScore8()));//收入利润率得分
                }

                if (p.getScore2() == null || p.getScore2().toString().trim().isEmpty()) {
                    row.createCell(15).setCellValue("——");
                } else {
                    row.createCell(15).setCellValue(String.valueOf(p.getScore2()));//单位能耗销售收入得分
                }

                if (p.getScore3() == null || p.getScore3().toString().trim().isEmpty()) {
                    row.createCell(16).setCellValue("——");
                } else {
                    row.createCell(16).setCellValue(String.valueOf(p.getScore3()));//单位污染物排放销售收入得分
                }

                if (p.getScore4() == null || p.getScore4().toString().trim().isEmpty()) {
                    row.createCell(17).setCellValue("——");
                } else {
                    row.createCell(17).setCellValue(String.valueOf(p.getScore4()));//研发经费投入强度得分
                }

                if (p.getScore5() == null || p.getScore5().toString().trim().isEmpty()) {
                    row.createCell(18).setCellValue("——");
                } else {
                    row.createCell(18).setCellValue(String.valueOf(p.getScore5()));//全员劳动生产率得分
                }

                if (p.getScore7() == null || p.getScore7().toString().trim().isEmpty()) {
                    row.createCell(19).setCellValue("——");
                } else {
                    row.createCell(19).setCellValue(String.valueOf(p.getScore7()));//单位用地销售收入得分
                }

                if (p.getZdyzbCScore() == null) {
                    row.createCell(20).setCellValue("0");
                } else {
                    row.createCell(20).setCellValue(p.getZdyzbCScore().toString());
                }

                if (p.getSumScore() == null || p.getSumScore().toString().trim().isEmpty()) {
                    row.createCell(21).setCellValue("——");
                } else {
                    row.createCell(21).setCellValue(String.valueOf(p.getSumScore()));//总分
                }
                if (p.getMjLevel() == null || p.getMjLevel().trim().isEmpty()) {
                    row.createCell(22).setCellValue("——");
                } else {
                    row.createCell(22).setCellValue(p.getMjLevel());//企业评级
                }

                row.createCell(23).setCellValue("参评");

            }

            // 设置响应头,指定下载的文件名
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("亩产评价结果确认表.xlsx", "UTF-8"));
            // 将工作簿写入响应输出流
            OutputStream outputStream = response.getOutputStream();
            workbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
